<script>
	/*
	  需求:手写实现对象的map方法(参考数组map)
	  数组的map特点:
	      1.map一共可以接受两个实参
	          第一个实参数据类型必须是函数,数组中每有一项就会执行一次该函数
	              回调函数接受3个参数
	                  1.item->代表遍历数组中得到的每一项(相当于对象的value)
	                  2.index->代表遍历数组中得到的每一项的下标(相当于对象的key)
	          第二个实参是回调函数的this指向,可以不传
	      2.根据旧数组生成全新的数组,不会影响到旧数组
	      3.新数组中的每一项的结果,由回调函数的返回值决定
	*/

	// 数组的map方法：

	var arr = [1, 2, 3];
	var newArr = arr.map((item) => {
		return item * 2;
	});
	// 创建新的组，不改变原数组
	console.log(arr, newArr);

	// 实现方法一：Object.keys + forEach
	var obj = {
		name: "nameval",
		age: "ageval",
		sex: "sexval",
	};

	Object.prototype.map = function (cb) {
		//需求:根据当前对象拥有的属性名个数来多次执行cb函数
		var keys = Object.keys(obj);
		// console.log(keys);

		var newObj = {};
		keys.forEach((key) => {
			newObj[key] = cb(this[key], key);
		});
		return newObj;

		// 扩展：获取所有value值
		// console.log(Object.values(obj));
	};

	var newObj = obj.map(function (item, index) {
		console.log(item, index);
		return item + "bb";
	});

	console.log(newObj);
</script>
